iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 11
0
AI & Data

作者超囉嗦,但一天只要十分鐘的MYSQL真.新手教學系列 第 11

第十一日-資料篩選趴兔:AND和OR,邏輯運算子大混戰

  • 分享至 

  • xImage
  •  

今天要介紹的是邏輯運算子AND和OR,
同為邏輯運算子的還有NOT (記得昨天的!跟<>嗎?),
我們這個年代(???)出生的小孩,文組數學課已經不教若P則Q了,
第一次看到的時候超興奮,
想當年(???)剛學程式在各種TRUE AND FALSE 是否為真轉來轉去,
轉的超過癮!

其實說來說去,AND和OR也就是字面上的意思,「和」跟「或」,
有時候我們對撈資料的條件會比較多。
例如去相親的時候:「想找男生,而且要會煮菜」,這個「而且」就是「和」的意思,
這時便要使用AND:SELECT * FROM 相親會員 WHERE性別是男生AND興趣是烹飪;

又或者去餐廳點餐會想要「主廚推薦或是豬肉料理」,
這時便要使用OR:SELECT * FROM 餐點 WHERE 主廚推薦=1 OR 肉類別='豬';
(看不懂主廚推薦=1是什麼意思的可以回去第四日看一下常用型別)

也有兩者複合使用的狀況,
例如「訂演唱會門票想要訂搖滾區的位置,或是A區第一排也可以」,
寫成SQL會變成:
SELECT * FROM 演唱會門票 WHERE 售出=0 AND (座位類別='搖滾區' OR (座位類別='A區' AND 排數=1))。

下面會以我們建好的student資料為範例,試試看各種SELECT,
在看語法之前也可以試著自己先寫看看。

  • AND 條件一和條件二

找出2020年入學的女性學生。

這裡可以看到兩個條件:2020年入學 和(AND)女性,
入學的日期是start_date欄位,2020年入學代表入學日期要大於等於2020年第一天,
性別是gender欄位,女性的話,性別欄位的值是'F',
我們的表全部都是學生,所以學生不算條件。

SELECT * FROM Education.student WHERE gender='F' AND start_date>='2020/01/01';
  • OR 條件一或條件二

找出不是2019年下半年入學的學生。

這裡可以看到條件是:不是2019年下半年入學,
入學的日期是start_date欄位,2019年下半年的區間是8月到12月,
但要「不是」下半年,所以就是在2019年8月之前或是(OR)2020年1月之後入學的學生。

SELECT * FROM Education.student WHERE start_date>='2020/01/01' OR start_date<'2019/07/01';
  • AND和OR複合

找出不是2019年下半年入學的女學生。

這句的話可以看到條件是
1.不是2019年下半年入學
2.而且是女學生
語法就會是條件一和(AND)條件二,
我們把剛剛WHERE後面寫的篩選條件貼過來:
1.不是2019年下半年入學 (start_date>='2020/01/01' OR start_date<'2019/07/01')
2.而且 AND 是女學生 (gender='F')

SELECT * FROM Education.student WHERE (start_date>='2020/01/01' OR start_date<'2019/07/01') AND gender='F' ;

換你試試看:

找出2000年後出生的女學生和2000年以前出生不是女生的男學生。


選出的結果會長這樣

語法如下:

SELECT * FROM Education.student WHERE (gender='F' AND birth_date>'2000/01/01') OR (gender!='F' AND birth_date<'2000/01/01');

可以試著自己想一些條件練習看看!


上一篇
第十日-資料篩選的重點:WHERE,從「>=<!=><」開始
下一篇
第十二日-資料篩選趴三:BETWEEN 、LIKE與NULL
系列文
作者超囉嗦,但一天只要十分鐘的MYSQL真.新手教學30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言